package com.softWang.common.mybatis;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.softWang.common.base.BasePO;
import com.softWang.common.utils.SecurityUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Objects;

/**
 * 通用参数填充实现类
 *
 */
@Component
public class DefaultDBFieldHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        //这里演示一种调用方式，如果实体都继承同一个基类，那么可以转化成基类给对象赋值方式
        if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BasePO) {
            BasePO baseDO = (BasePO) metaObject.getOriginalObject();

            LocalDateTime current = LocalDateTime.now();
            baseDO.setCtime(current);
            baseDO.setUtime(current);
            baseDO.setDeleted(0);
            Long userId = SecurityUtils.getUserId();
            baseDO.setCuser(userId);
            baseDO.setEuser(userId);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //这里演示另一种调用方式，直接设置属性名和值的方式，当属性名有setter方法时，会自动调用
        if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BasePO) {
            // 更新时间以当前时间为更新时间
            setFieldValByName("utime", LocalDateTime.now(), metaObject);

            // 当前登录用户为更新人
            Long userId = SecurityUtils.getUserId();
            setFieldValByName("euser", userId, metaObject);
        }
    }
}
